#include <bits/stdc++.h>

using namespace std;

const int maxn=205;
const double eps=1e-7;
inline int dcmp(const double &d){if(fabs(d)<eps)return 0;else return d>0?1:-1;}
inline const bool cmp(const double &x,const double &y){return dcmp(x-y)<0;}
struct Point{
    double x;int u,v;int val;
    const bool operator < (const Point &p) const{ return x<p.x||x==p.x&&v<p.v;}
};

Point p[maxn];
double y[maxn],u[maxn],v[maxn];
struct node{
    int l,r,cnt;
    double len;
    node(int l=0,int r=0):l(l),r(r),cnt(0),len(0){}
};
node seg[4*maxn];
inline void update(const int &p){
    node &nd=seg[p];
    //printf("p=%d: l=%d,r=%d,cnt=%d\n",p,nd.l,nd.r,nd.cnt);
    if(nd.cnt) nd.len=y[nd.r-1]-y[nd.l-1];
    else{
        if(nd.l+1==nd.r) nd.len=0;
        else nd.len=seg[p<<1].len+seg[p<<1|1].len;
    }
}
void build(const int &p,const int &l,const int &r){
    seg[p]=node(l,r);
    if(r-l>1){
        int mid=(l+r)>>1;
        build(p<<1,l,mid);
        build(p<<1|1,mid,r);
    }
}
int val,l,r;
void ins(const int &p){
    node &nd=seg[p];
    if(nd.l>=l&&nd.r<=r) nd.cnt+=val;
    else{
        int mid=(nd.l+nd.r)>>1;
        if(l<mid) ins(p<<1);
        if(r>mid) ins(p<<1|1);
    }
    update(p);
}

const char *format="Test case #%d\nTotal explored area: %.2f\n\n";

int main(){
    int n;int kase=1;
    while(~scanf("%d",&n)&&n){
        for(int i=0;i<n;i++){
            scanf("%lf%lf%lf%lf",&p[i].x,&u[i],&p[i+n].x,&v[i]);
            v[i+n]=v[i];
            u[i+n]=u[i];
            p[i].val=1;p[i+n].val=-1;
        }
        for(int i=0;i<n;i++) y[i]=u[i],y[i+n]=v[i];
        n<<=1;
        sort(y,y+n,cmp);
        //for(int i=0;i<n;i++) printf("%.2f ",y[i]);putchar('\n');
        for(int i=0;i<n;i++) p[i].u=lower_bound(y,y+n,u[i],cmp)-y+1,p[i].v=lower_bound(y,y+n,v[i],cmp)-y+1;

        sort(p,p+n);
        build(1,1,n);
        val=p[0].val;l=p[0].u;r=p[0].v;
        ins(1);

        //for(int i=0;i<n;i++) printf("x,u,v=%.2f,%d,%d\n",p[i].x,p[i].u,p[i].v);

        double ans;
        ans=0;
        for(int i=1;i<n;i++){
            ans+=seg[1].len*(p[i].x-p[i-1].x);
            //printf("seg[1].len=%.2f\n",seg[1].len);
            val=p[i].val;l=p[i].u;r=p[i].v;
            ins(1);
        }

        printf(format,kase++,ans);
    }

    return 0;
}
